package com.lyj.mp.domain.po;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.lyj.mp.domain.enums.UserStatus;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Data
@TableName(value = "user",autoResultMap = true) // 用于指定表名，并且自动根据表结构生成结果映射
@AllArgsConstructor
@NoArgsConstructor
public class User {

    /**
     * 用户id
     */
//    @TableId(value = "id", type = ASSIGN_ID) // 指定主键类型
    private Long id;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    @TableField("password")  // 指定数据库字段名 通常用于变量名和数据库字段不一致的情况
    // 或者 变量以is开头 且是 boolean类型
    private String password;

//    @TableField(exist = false)  // 变量不在数据库中
//    private String ab;

    /**
     * 注册手机号
     */
    private String phone;

    /**
     * 详细信息
     *   使用JacksonTypeHandler作为类型处理器
     *   这个注解通常用于需要将复杂的对象类型转换为JSON字符串并存储在数据库中的场景
     *   JacksonTypeHandler通过利用Jackson库的功能，能够将对象序列化为JSON字符串，或者反序列化回对象
     *   这样做可以方便地在数据库中存储复杂的数据结构，而无需手动进行序列化和反序列化的过程
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private UserInfo info;

    /**
     * 使用状态（1正常 2冻结）
     */
    private UserStatus status;

    /**
     * 账户余额
     */
    private Integer balance;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
}
